home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 2000 April: Mac OS SDK / Dev.CD Apr 00 SDK1.toast / Development Kits / Hardware / PowerManager DDK 1.0f1 / Interfaces&Libraries / Interfaces / DriverServices.h < prev    next >
Encoding:
C/C++ Source or Header  |  1999-10-08  |  17.1 KB  |  671 lines  |  [TEXT/MPS ]

  1. /*
  2.      File:        DriverServices.h
  3.  
  4.      Contains:    Driver Services Interfaces.
  5.  
  6.      Version:    PowerSurge 1.0.2
  7.  
  8.      DRI:        Jonathan Sand
  9.  
  10.      Copyright:    © 1985-1999 by Apple Computer, Inc., all rights reserved
  11.  
  12.      Warning:    *** APPLE INTERNAL USE ONLY ***
  13.                  This file may contain unreleased API's
  14.  
  15.      BuildInfo:    Built by:            Scott Johnson
  16.                  On:                    10/8/99 11:26 AM
  17.                  With Interfacer:    3.0d13   (MPW PowerPC)
  18.                  From:                DriverServices.i
  19.                      Revision:        59
  20.                      Dated:            6/19/99
  21.                      Last change by:    SAJ
  22.                      Last comment:    Moved power handler implementation and prototypes to Power Mgr
  23.  
  24.      Bugs:        Report bugs to Radar component "System Interfaces", "Latest"
  25.                  List the version information (from above) in the Problem Description.
  26.  
  27. */
  28. #ifndef __DRIVERSERVICES__
  29. #define __DRIVERSERVICES__
  30.  
  31. #ifndef __CONDITIONALMACROS__
  32. #include <ConditionalMacros.h>
  33. #endif
  34.  
  35. #ifndef __MACTYPES__
  36. #include <MacTypes.h>
  37. #endif
  38.  
  39. #ifndef __ERRORS__
  40. #include <Errors.h>
  41. #endif
  42.  
  43. #ifndef __MACHINEEXCEPTIONS__
  44. #include <MachineExceptions.h>
  45. #endif
  46.  
  47. #ifndef __DEVICES__
  48. #include <Devices.h>
  49. #endif
  50.  
  51. #ifndef __DRIVERSYNCHRONIZATION__
  52. #include <DriverSynchronization.h>
  53. #endif
  54.  
  55. #ifndef __NAMEREGISTRY__
  56. #include <NameRegistry.h>
  57. #endif
  58.  
  59.  
  60.  
  61.  
  62. #if PRAGMA_ONCE
  63. #pragma once
  64. #endif
  65.  
  66. #ifdef __cplusplus
  67. extern "C" {
  68. #endif
  69.  
  70. #if PRAGMA_IMPORT
  71. #pragma import on
  72. #endif
  73.  
  74. #if PRAGMA_STRUCT_ALIGN
  75.     #pragma options align=power
  76. #elif PRAGMA_STRUCT_PACKPUSH
  77.     #pragma pack(push, 2)
  78. #elif PRAGMA_STRUCT_PACK
  79.     #pragma pack(2)
  80. #endif
  81.  
  82. /******************************************************************
  83.  *
  84.  *         Previously in Kernel.h
  85.  *
  86.  ******************************************************************/
  87. /* Kernel basics*/
  88. typedef struct OpaqueIOPreparationID*     IOPreparationID;
  89. typedef struct OpaqueSoftwareInterruptID*  SoftwareInterruptID;
  90. typedef struct OpaqueTaskID*             TaskID;
  91. typedef struct OpaqueTimerID*             TimerID;
  92. /* Tasking*/
  93. typedef UInt32                             ExecutionLevel;
  94. enum {
  95.     kTaskLevel                    = 0,
  96.     kSoftwareInterruptLevel        = 1,
  97.     kAcceptFunctionLevel        = 2,
  98.     kKernelLevel                = 3,
  99.     kSIHAcceptFunctionLevel        = 4,
  100.     kSecondaryInterruptLevel    = 5,
  101.     kHardwareInterruptLevel        = 6
  102. };
  103.  
  104. typedef CALLBACK_API_C( void , SoftwareInterruptHandler )(void *p1, void *p2);
  105. typedef CALLBACK_API_C( OSStatus , SecondaryInterruptHandler2 )(void *p1, void *p2);
  106. #define kCurrentAddressSpaceID ((AddressSpaceID) -1)
  107. /* Memory System basics*/
  108.  
  109. struct LogicalAddressRange {
  110.     LogicalAddress                     address;
  111.     ByteCount                         count;
  112. };
  113. typedef struct LogicalAddressRange        LogicalAddressRange;
  114. typedef LogicalAddressRange *            LogicalAddressRangePtr;
  115.  
  116. struct PhysicalAddressRange {
  117.     PhysicalAddress                 address;
  118.     ByteCount                         count;
  119. };
  120. typedef struct PhysicalAddressRange        PhysicalAddressRange;
  121. typedef PhysicalAddressRange *            PhysicalAddressRangePtr;
  122. /* For PrepareMemoryForIO and CheckpointIO*/
  123.  
  124. typedef OptionBits                         IOPreparationOptions;
  125. enum {
  126.     kIOMultipleRanges            = 0x00000001,
  127.     kIOLogicalRanges            = 0x00000002,
  128.     kIOMinimalLogicalMapping    = 0x00000004,
  129.     kIOShareMappingTables        = 0x00000008,
  130.     kIOIsInput                    = 0x00000010,
  131.     kIOIsOutput                    = 0x00000020,
  132.     kIOCoherentDataPath            = 0x00000040,
  133.     kIOTransferIsLogical        = 0x00000080,
  134.     kIOClientIsUserMode            = 0x00000080
  135. };
  136.  
  137. typedef OptionBits                         IOPreparationState;
  138. enum {
  139.     kIOStateDone                = 0x00000001
  140. };
  141.  
  142. enum {
  143.     kInvalidPageAddress            = (-1)
  144. };
  145.  
  146.  
  147. struct AddressRange {
  148.     void *                            base;
  149.     ByteCount                         length;
  150. };
  151. typedef struct AddressRange                AddressRange;
  152. /* C's treatment of arrays and array pointers is atypical*/
  153.  
  154. typedef LogicalAddress *                LogicalMappingTablePtr;
  155. typedef PhysicalAddress *                PhysicalMappingTablePtr;
  156. typedef AddressRange *                    AddressRangeTablePtr;
  157.  
  158. struct MultipleAddressRange {
  159.     ItemCount                         entryCount;
  160.     AddressRangeTablePtr             rangeTable;
  161. };
  162. typedef struct MultipleAddressRange        MultipleAddressRange;
  163. /*
  164.    Separate C definition so that union has a name.  A future version of the interfacer
  165.    tool will allow a name (that gets thrown out in Pascal and Asm).
  166. */
  167.  
  168. struct IOPreparationTable {
  169.     IOPreparationOptions             options;
  170.     IOPreparationState                 state;
  171.     IOPreparationID                 preparationID;
  172.     AddressSpaceID                     addressSpace;
  173.     ByteCount                         granularity;
  174.     ByteCount                         firstPrepared;
  175.     ByteCount                         lengthPrepared;
  176.     ItemCount                         mappingEntryCount;
  177.     LogicalMappingTablePtr             logicalMapping;
  178.     PhysicalMappingTablePtr         physicalMapping;
  179.     union {
  180.         AddressRange                     range;
  181.         MultipleAddressRange             multipleRanges;
  182.     }                                 rangeInfo;
  183. };
  184. typedef struct IOPreparationTable        IOPreparationTable;
  185.  
  186. typedef OptionBits                         IOCheckpointOptions;
  187. enum {
  188.     kNextIOIsInput                = 0x00000001,
  189.     kNextIOIsOutput                = 0x00000002,
  190.     kMoreIOTransfers            = 0x00000004
  191. };
  192.  
  193. /* For SetProcessorCacheMode*/
  194.  
  195. typedef UInt32                             ProcessorCacheMode;
  196. enum {
  197.     kProcessorCacheModeDefault    = 0,
  198.     kProcessorCacheModeInhibited = 1,
  199.     kProcessorCacheModeWriteThrough = 2,
  200.     kProcessorCacheModeCopyBack    = 3
  201. };
  202.  
  203. /*
  204.    For GetPageInformation
  205.    (Note: if kPageInformationVersion fails, try 0 -- old versions of DSL defined  kPageInformationVersion as 0)
  206. */
  207.  
  208. enum {
  209.     kPageInformationVersion        = 1
  210. };
  211.  
  212. typedef UInt32                             PageStateInformation;
  213. enum {
  214.     kPageIsProtected            = 0x00000001,
  215.     kPageIsProtectedPrivileged    = 0x00000002,
  216.     kPageIsModified                = 0x00000004,
  217.     kPageIsReferenced            = 0x00000008,
  218.     kPageIsLockedResident        = 0x00000010,                    /* held and locked resident*/
  219.     kPageIsInMemory                = 0x00000020,
  220.     kPageIsShared                = 0x00000040,
  221.     kPageIsWriteThroughCached    = 0x00000080,
  222.     kPageIsCopyBackCached        = 0x00000100,
  223.     kPageIsHeldResident            = 0x00000200,                    /* held resident - use kPageIsLockedResident to check for locked state*/
  224.     kPageIsLocked                = kPageIsLockedResident,        /* Deprecated*/
  225.     kPageIsResident                = kPageIsInMemory                /* Deprecated*/
  226. };
  227.  
  228.  
  229. struct PageInformation {
  230.     AreaID                             area;
  231.     ItemCount                         count;
  232.     PageStateInformation             information[1];
  233. };
  234. typedef struct PageInformation            PageInformation;
  235. typedef PageInformation *                PageInformationPtr;
  236.  
  237. /*  Tasks  */
  238. EXTERN_API_C( ExecutionLevel )
  239. CurrentExecutionLevel            (void);
  240.  
  241. EXTERN_API_C( TaskID )
  242. CurrentTaskID                    (void);
  243.  
  244. EXTERN_API_C( OSStatus )
  245. DelayFor                        (Duration                 delayDuration);
  246.  
  247. EXTERN_API_C( Boolean )
  248. InPrivilegedMode                (void);
  249.  
  250.  
  251. /*  Software Interrupts  */
  252. EXTERN_API_C( OSStatus )
  253. CreateSoftwareInterrupt            (SoftwareInterruptHandler  handler,
  254.                                  TaskID                 task,
  255.                                  void *                    p1,
  256.                                  Boolean                 persistent,
  257.                                  SoftwareInterruptID *    theSoftwareInterrupt);
  258.  
  259.  
  260. EXTERN_API_C( OSStatus )
  261. SendSoftwareInterrupt            (SoftwareInterruptID     theSoftwareInterrupt,
  262.                                  void *                    p2);
  263.  
  264. EXTERN_API_C( OSStatus )
  265. DeleteSoftwareInterrupt            (SoftwareInterruptID     theSoftwareInterrupt);
  266.  
  267. #if TARGET_OS_MAC
  268. /*  Secondary Interrupts  */
  269. EXTERN_API_C( OSStatus )
  270. CallSecondaryInterruptHandler2    (SecondaryInterruptHandler2  theHandler,
  271.                                  ExceptionHandler         exceptionHandler,
  272.                                  void *                    p1,
  273.                                  void *                    p2);
  274.  
  275. EXTERN_API_C( OSStatus )
  276. QueueSecondaryInterruptHandler    (SecondaryInterruptHandler2  theHandler,
  277.                                  ExceptionHandler         exceptionHandler,
  278.                                  void *                    p1,
  279.                                  void *                    p2);
  280.  
  281. #endif  /* TARGET_OS_MAC */
  282.  
  283. /*  Timers  */
  284. EXTERN_API_C( OSStatus )
  285. SetInterruptTimer                (const AbsoluteTime *    expirationTime,
  286.                                  SecondaryInterruptHandler2  handler,
  287.                                  void *                    p1,
  288.                                  TimerID *                theTimer);
  289.  
  290. EXTERN_API_C( OSStatus )
  291. SetPersistentTimer                (Duration                 frequency,
  292.                                  SecondaryInterruptHandler2  theHandler,
  293.                                  void *                    p1,
  294.                                  TimerID *                theTimer);
  295.  
  296. EXTERN_API_C( OSStatus )
  297. CancelTimer                        (TimerID                 theTimer,
  298.                                  AbsoluteTime *            timeRemaining);
  299.  
  300.  
  301. /*  I/O related Operations  */
  302. EXTERN_API_C( OSStatus )
  303. PrepareMemoryForIO                (IOPreparationTable *    theIOPreparationTable);
  304.  
  305. EXTERN_API_C( OSStatus )
  306. CheckpointIO                    (IOPreparationID         theIOPreparation,
  307.                                  IOCheckpointOptions     options);
  308.  
  309.  
  310. /*  Memory Operations  */
  311. EXTERN_API_C( OSStatus )
  312. GetPageInformation                (AddressSpaceID         addressSpace,
  313.                                  ConstLogicalAddress     base,
  314.                                  ByteCount                 length,
  315.                                  PBVersion                 version,
  316.                                  PageInformation *        thePageInfo);
  317.  
  318. /*  Processor Cache Related  */
  319. EXTERN_API_C( OSStatus )
  320. SetProcessorCacheMode            (AddressSpaceID         addressSpace,
  321.                                  ConstLogicalAddress     base,
  322.                                  ByteCount                 length,
  323.                                  ProcessorCacheMode     cacheMode);
  324.  
  325. /******************************************************************
  326.  *
  327.  *         Was in DriverSupport.h or DriverServices.h
  328.  *
  329.  ******************************************************************/
  330. #define    kAAPLDeviceLogicalAddress "AAPL,address"
  331.  
  332. typedef LogicalAddress *                DeviceLogicalAddressPtr;
  333. enum {
  334.     durationMicrosecond            = -1L,                            /* Microseconds are negative*/
  335.     durationMillisecond            = 1L,                            /* Milliseconds are positive*/
  336.     durationSecond                = 1000L,                        /* 1000 * durationMillisecond*/
  337.     durationMinute                = 60000L,                        /* 60 * durationSecond,*/
  338.     durationHour                = 3600000L,                        /* 60 * durationMinute,*/
  339.     durationDay                    = 86400000L,                    /* 24 * durationHour,*/
  340.     durationNoWait                = 0L,                            /* don't block*/
  341.     durationForever                = 0x7FFFFFFF                    /* no time limit*/
  342. };
  343.  
  344. enum {
  345.     k8BitAccess                    = 0,                            /* access as 8 bit*/
  346.     k16BitAccess                = 1,                            /* access as 16 bit*/
  347.     k32BitAccess                = 2                                /* access as 32 bit*/
  348. };
  349.  
  350. typedef UnsignedWide                     Nanoseconds;
  351.  
  352. EXTERN_API_C( OSErr )
  353. IOCommandIsComplete                (IOCommandID             theID,
  354.                                  OSErr                     theResult);
  355.  
  356. EXTERN_API_C( OSErr )
  357. GetIOCommandInfo                (IOCommandID             theID,
  358.                                  IOCommandContents *    theContents,
  359.                                  IOCommandCode *        theCommand,
  360.                                  IOCommandKind *        theKind);
  361.  
  362. EXTERN_API_C( void )
  363. UpdateDeviceActivity            (RegEntryID *            deviceEntry);
  364.  
  365. EXTERN_API_C( void )
  366. BlockCopy                        (const void *            srcPtr,
  367.                                  void *                    destPtr,
  368.                                  Size                     byteCount);
  369.  
  370. EXTERN_API_C( LogicalAddress )
  371. PoolAllocateResident            (ByteCount                 byteSize,
  372.                                  Boolean                 clear);
  373.  
  374. EXTERN_API_C( OSStatus )
  375. PoolDeallocate                    (LogicalAddress         address);
  376.  
  377. EXTERN_API_C( ByteCount )
  378. GetLogicalPageSize                (void);
  379.  
  380. EXTERN_API_C( ByteCount )
  381. GetDataCacheLineSize            (void);
  382.  
  383. EXTERN_API_C( OSStatus )
  384. FlushProcessorCache                (AddressSpaceID         spaceID,
  385.                                  LogicalAddress         base,
  386.                                  ByteCount                 length);
  387.  
  388. EXTERN_API_C( LogicalAddress )
  389. MemAllocatePhysicallyContiguous    (ByteCount                 byteSize,
  390.                                  Boolean                 clear);
  391.  
  392. EXTERN_API_C( OSStatus )
  393. MemDeallocatePhysicallyContiguous (LogicalAddress         address);
  394.  
  395.  
  396. EXTERN_API_C( AbsoluteTime )
  397. UpTime                            (void);
  398.  
  399. EXTERN_API_C( void )
  400. GetTimeBaseInfo                    (UInt32 *                minAbsoluteTimeDelta,
  401.                                  UInt32 *                theAbsoluteTimeToNanosecondNumerator,
  402.                                  UInt32 *                theAbsoluteTimeToNanosecondDenominator,
  403.                                  UInt32 *                theProcessorToAbsoluteTimeNumerator,
  404.                                  UInt32 *                theProcessorToAbsoluteTimeDenominator);
  405.  
  406.  
  407. EXTERN_API_C( Nanoseconds )
  408. AbsoluteToNanoseconds            (AbsoluteTime             absoluteTime);
  409.  
  410. EXTERN_API_C( Duration )
  411. AbsoluteToDuration                (AbsoluteTime             absoluteTime);
  412.  
  413. EXTERN_API_C( AbsoluteTime )
  414. NanosecondsToAbsolute            (Nanoseconds             nanoseconds);
  415.  
  416. EXTERN_API_C( AbsoluteTime )
  417. DurationToAbsolute                (Duration                 duration);
  418.  
  419. EXTERN_API_C( AbsoluteTime )
  420. AddAbsoluteToAbsolute            (AbsoluteTime             absoluteTime1,
  421.                                  AbsoluteTime             absoluteTime2);
  422.  
  423. EXTERN_API_C( AbsoluteTime )
  424. SubAbsoluteFromAbsolute            (AbsoluteTime             leftAbsoluteTime,
  425.                                  AbsoluteTime             rightAbsoluteTime);
  426.  
  427. EXTERN_API_C( AbsoluteTime )
  428. AddNanosecondsToAbsolute        (Nanoseconds             nanoseconds,
  429.                                  AbsoluteTime             absoluteTime);
  430.  
  431. EXTERN_API_C( AbsoluteTime )
  432. AddDurationToAbsolute            (Duration                 duration,
  433.                                  AbsoluteTime             absoluteTime);
  434.  
  435. EXTERN_API_C( AbsoluteTime )
  436. SubNanosecondsFromAbsolute        (Nanoseconds             nanoseconds,
  437.                                  AbsoluteTime             absoluteTime);
  438.  
  439. EXTERN_API_C( AbsoluteTime )
  440. SubDurationFromAbsolute            (Duration                 duration,
  441.                                  AbsoluteTime             absoluteTime);
  442.  
  443. EXTERN_API_C( Nanoseconds )
  444. AbsoluteDeltaToNanoseconds        (AbsoluteTime             leftAbsoluteTime,
  445.                                  AbsoluteTime             rightAbsoluteTime);
  446.  
  447. EXTERN_API_C( Duration )
  448. AbsoluteDeltaToDuration            (AbsoluteTime             leftAbsoluteTime,
  449.                                  AbsoluteTime             rightAbsoluteTime);
  450.  
  451. EXTERN_API_C( Nanoseconds )
  452. DurationToNanoseconds            (Duration                 theDuration);
  453.  
  454. EXTERN_API_C( Duration )
  455. NanosecondsToDuration            (Nanoseconds             theNanoseconds);
  456.  
  457.  
  458. EXTERN_API_C( OSErr )
  459. PBQueueInit                        (QHdrPtr                 qHeader);
  460.  
  461. EXTERN_API_C( OSErr )
  462. PBQueueCreate                    (QHdrPtr *                qHeader);
  463.  
  464. EXTERN_API_C( OSErr )
  465. PBQueueDelete                    (QHdrPtr                 qHeader);
  466.  
  467. EXTERN_API_C( void )
  468. PBEnqueue                        (QElemPtr                 qElement,
  469.                                  QHdrPtr                 qHeader);
  470.  
  471. EXTERN_API_C( OSErr )
  472. PBEnqueueLast                    (QElemPtr                 qElement,
  473.                                  QHdrPtr                 qHeader);
  474.  
  475. EXTERN_API_C( OSErr )
  476. PBDequeue                        (QElemPtr                 qElement,
  477.                                  QHdrPtr                 qHeader);
  478.  
  479. EXTERN_API_C( OSErr )
  480. PBDequeueFirst                    (QHdrPtr                 qHeader,
  481.                                  QElemPtr *                theFirstqElem);
  482.  
  483. EXTERN_API_C( OSErr )
  484. PBDequeueLast                    (QHdrPtr                 qHeader,
  485.                                  QElemPtr *                theLastqElem);
  486.  
  487. EXTERN_API_C( char *)
  488. CStrCopy                        (char *                    dst,
  489.                                  const char *            src);
  490.  
  491. EXTERN_API_C( StringPtr )
  492. PStrCopy                        (StringPtr                 dst,
  493.                                  ConstStr255Param         src);
  494.  
  495. EXTERN_API_C( char *)
  496. CStrNCopy                        (char *                    dst,
  497.                                  const char *            src,
  498.                                  UInt32                 max);
  499.  
  500. EXTERN_API_C( StringPtr )
  501. PStrNCopy                        (StringPtr                 dst,
  502.                                  ConstStr255Param         src,
  503.                                  UInt32                 max);
  504.  
  505. EXTERN_API_C( char *)
  506. CStrCat                            (char *                    dst,
  507.                                  const char *            src);
  508.  
  509. EXTERN_API_C( StringPtr )
  510. PStrCat                            (StringPtr                 dst,
  511.                                  ConstStr255Param         src);
  512.  
  513. EXTERN_API_C( char *)
  514. CStrNCat                        (char *                    dst,
  515.                                  const char *            src,
  516.                                  UInt32                 max);
  517.  
  518. EXTERN_API_C( StringPtr )
  519. PStrNCat                        (StringPtr                 dst,
  520.                                  ConstStr255Param         src,
  521.                                  UInt32                 max);
  522.  
  523. EXTERN_API_C( void )
  524. PStrToCStr                        (char *                    dst,
  525.                                  ConstStr255Param         src);
  526.  
  527. EXTERN_API_C( void )
  528. CStrToPStr                        (Str255                 dst,
  529.                                  const char *            src);
  530.  
  531. EXTERN_API_C( SInt16 )
  532. CStrCmp                            (const char *            s1,
  533.                                  const char *            s2);
  534.  
  535. EXTERN_API_C( SInt16 )
  536. PStrCmp                            (ConstStr255Param         str1,
  537.                                  ConstStr255Param         str2);
  538.  
  539. EXTERN_API_C( SInt16 )
  540. CStrNCmp                        (const char *            s1,
  541.                                  const char *            s2,
  542.                                  UInt32                 max);
  543.  
  544. EXTERN_API_C( SInt16 )
  545. PStrNCmp                        (ConstStr255Param         str1,
  546.                                  ConstStr255Param         str2,
  547.                                  UInt32                 max);
  548.  
  549. EXTERN_API_C( UInt32 )
  550. CStrLen                            (const char *            src);
  551.  
  552. EXTERN_API_C( UInt32 )
  553. PStrLen                            (ConstStr255Param         src);
  554.  
  555. EXTERN_API_C( OSStatus )
  556. DeviceProbe                        (void *                    theSrc,
  557.                                  void *                    theDest,
  558.                                  UInt32                 AccessType);
  559.  
  560. EXTERN_API_C( OSStatus )
  561. DelayForHardware                (AbsoluteTime             absoluteTime);
  562.  
  563.  
  564.  
  565. /******************************************************************
  566.  *
  567.  *         Was in Interrupts.h 
  568.  *
  569.  ******************************************************************/
  570. /*  Interrupt types  */
  571. typedef struct OpaqueInterruptSetID*     InterruptSetID;
  572. typedef long                             InterruptMemberNumber;
  573.  
  574. struct InterruptSetMember {
  575.     InterruptSetID                     setID;
  576.     InterruptMemberNumber             member;
  577. };
  578. typedef struct InterruptSetMember        InterruptSetMember;
  579. enum {
  580.     kISTChipInterruptSource        = 0,
  581.     kISTOutputDMAInterruptSource = 1,
  582.     kISTInputDMAInterruptSource    = 2,
  583.     kISTPropertyMemberCount        = 3
  584. };
  585.  
  586.  
  587. typedef InterruptSetMember                 ISTProperty[3];
  588. #define kISTPropertyName    "driver-ist" 
  589.  
  590. typedef long                             InterruptReturnValue;
  591. enum {
  592.     kFirstMemberNumber            = 1,
  593.     kIsrIsComplete                = 0,
  594.     kIsrIsNotComplete            = -1,
  595.     kMemberNumberParent            = -2
  596. };
  597.  
  598. typedef Boolean                         InterruptSourceState;
  599. enum {
  600.     kSourceWasEnabled            = true,
  601.     kSourceWasDisabled            = false
  602. };
  603.  
  604.  
  605. typedef CALLBACK_API_C( InterruptMemberNumber , InterruptHandler )(InterruptSetMember ISTmember, void *refCon, UInt32 theIntCount);
  606. typedef CALLBACK_API_C( void , InterruptEnabler )(InterruptSetMember ISTmember, void *refCon);
  607. typedef CALLBACK_API_C( InterruptSourceState , InterruptDisabler )(InterruptSetMember ISTmember, void *refCon);
  608. enum {
  609.     kReturnToParentWhenComplete    = 0x00000001,
  610.     kReturnToParentWhenNotComplete = 0x00000002
  611. };
  612.  
  613. typedef OptionBits                         InterruptSetOptions;
  614. /*  Interrupt Services  */
  615. EXTERN_API_C( OSStatus )
  616. CreateInterruptSet                (InterruptSetID         parentSet,
  617.                                  InterruptMemberNumber     parentMember,
  618.                                  InterruptMemberNumber     setSize,
  619.                                  InterruptSetID *        setID,
  620.                                  InterruptSetOptions     options);
  621.  
  622.  
  623. EXTERN_API_C( OSStatus )
  624. InstallInterruptFunctions        (InterruptSetID         setID,
  625.                                  InterruptMemberNumber     member,
  626.                                  void *                    refCon,
  627.                                  InterruptHandler         handlerFunction,
  628.                                  InterruptEnabler         enableFunction,
  629.                                  InterruptDisabler         disableFunction);
  630.  
  631.  
  632. EXTERN_API_C( OSStatus )
  633. GetInterruptFunctions            (InterruptSetID         setID,
  634.                                  InterruptMemberNumber     member,
  635.                                  void **                refCon,
  636.                                  InterruptHandler *        handlerFunction,
  637.                                  InterruptEnabler *        enableFunction,
  638.                                  InterruptDisabler *    disableFunction);
  639.  
  640. EXTERN_API_C( OSStatus )
  641. ChangeInterruptSetOptions        (InterruptSetID         setID,
  642.                                  InterruptSetOptions     options);
  643.  
  644. EXTERN_API_C( OSStatus )
  645. GetInterruptSetOptions            (InterruptSetID         setID,
  646.                                  InterruptSetOptions *    options);
  647.  
  648.  
  649.  
  650.  
  651. #if PRAGMA_STRUCT_ALIGN
  652.     #pragma options align=reset
  653. #elif PRAGMA_STRUCT_PACKPUSH
  654.     #pragma pack(pop)
  655. #elif PRAGMA_STRUCT_PACK
  656.     #pragma pack()
  657. #endif
  658.  
  659. #ifdef PRAGMA_IMPORT_OFF
  660. #pragma import off
  661. #elif PRAGMA_IMPORT
  662. #pragma import reset
  663. #endif
  664.  
  665. #ifdef __cplusplus
  666. }
  667. #endif
  668.  
  669. #endif /* __DRIVERSERVICES__ */
  670.  
  671.